#pragma once

#include <Windows.h>
#include <locale.h>
#include <wchar.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


// 方向
typedef enum Direction
{
    UP = 1,     // 上
    DOWN,       // 下
    LEFT,       // 左
    RIGHT       // 右

} Direction;

// 游戏状态
typedef enum GameStatus
{
    OK = 0,         //运行中
    KILL_BY_WALL,   //撞墙
    KILL_BY_SELF,   //撞自己
    PAUSE,          //暂停
    ESC             //退出
} GameStatus;

// 蛇节点
// struct SnakeNode 取别名 SnakeNode
// struct SnakeNode * 取别名 pSnakeNode
typedef struct SnakeNode
{
    int x;
    int y;
    struct SnakeNode *next;
} SnakeNode, * pSnakeNode;

// 贪吃蛇游戏
typedef struct Snake
{
    pSnakeNode _pSnake;     // 蛇头
    pSnakeNode _pFood;      // 食物
    int _foodScore;         // 单个食物分数
    int _totalScore;        // 总分数
    int _sleepTime;         // 睡眠时间 -- 控制速度
    Direction _dir;         // 方向
    GameStatus _status;     // 游戏状态
} Snake, * pSnake;


void GameStart(pSnake ps);
void SnakeInit(pSnake ps);
void GameRun(pSnake ps);
void GameEnd(pSnake ps);
